#继承
#定义一个person类：
class Person(object):
    def say_hi(self):#行为
        print('大家好，我是人类')

#定义三个子类：
class Chinese(Person):
    #子类重写父类中的继承行为，程序执行时，会执行子类重写的行为。
    def say_hi(self):
        print('中国人:你吃了吗？')



class Korean(Person):
    def say_hi(self):
        print('韩国人：阿尼哈塞呦，泡菜思密达')



class Japanese(Person):
    def say_hi(self):
        print('日本人：亚麻得，八嘎')
        super().say_hi() #子类需要执行父类的行为


if __name__ == '__main__':
    chinese = Chinese()  #子类执行行为，默认直接执行父类行为，如果子类和父类行为不一致，子类重写父类中继承而来的行为
    chinese.say_hi()

#定义一个Person类父类
class Person(object):
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender
    @property
    def name(self):
        return self._name
    @name.setter
    def name(self,name):
        self._name = name
    def __str__(self):
        return f'Person[name={self.name},age={self.age},gender= {self.gender}]'
#定义一个子类(学生)：继承Person类:
class Student(Person):
    def __init__(self,name,age,gender,stu_id):
        super().__init__(name,age,gender) #name,age,gender数据是在父类中定义的，所以应该将数据传递给父类实现赋值  #父类中的数据传递给父类赋值
        self.stu_id = stu_id#自己的数据自己赋值
    def __str__(self):
        info = super().__str__()#获取父类中继承而来的数据
        return f'student[{info},stu_id={self.stu_id}'
#定义一个子类(教师)：继承Person类：
class Teacher(Person):
    def __init__(self,name,age,gender,teaching_field):
        super().__init__(name,age,gender)
        self.teaching_field = teaching_field
    def __str__(self):
        info = super().__str__()
        return f'Teacher [{info},teaching_field = {self.teaching_field}]'

if __name__ == '__main__':
    stu = Student('张三',18,'男','1001')
    print(stu)

    teacher = Teacher('王老师',40,'男','英语+体育')
    print(teacher)





